/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fatec.controlecal;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.rms.RecordEnumeration;

/**
 *
 * @author gilberto
 */
public class Refeicao {
    
    private int idAlimento;
    private int quantidade;
    private Calendar data;
    private int total;
    
    private int totalDiário;
    
    public static final int REFEICAO_DO_DIA = 1;
    public static final int TODAS_AS_REFEIÇÕES = 2;
    
    

    public boolean addRefeição(Conexao conexao,Alimento alimento,int totalCalorias){
        boolean resultado = false;
         
        try {
            conexao.abrirStore();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            dos.writeInt(idAlimento);
            dos.writeInt(quantidade);
            Calendar hoje = Calendar.getInstance();
            dos.writeLong(hoje.getTime().getTime());
            int subtotal = quantidade*alimento.getCalorias();
            dos.writeInt(subtotal);
            
                        
            byte bytes[] = baos.toByteArray();
            conexao.getStore().addRecord(bytes, 0, bytes.length);
            conexao.fecharStore();
           
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return resultado;
    }
    
    public boolean éHoje(){
        boolean retorno = false;
        Calendar hoje = Calendar.getInstance();        
        if(hoje.get(Calendar.DATE) == data.get(Calendar.DATE)){
            if(hoje.get(Calendar.MONTH) == data.get(Calendar.MONTH)){
                if(hoje.get(Calendar.YEAR) == data.get(Calendar.YEAR)){
                    retorno = true;
                }
            }
        }
        return retorno;
    }
    
    public Refeicao[] getRefeições(Conexao conexão,int caso,int totalCalorias){ 
        
        Refeicao refeição[] = new Refeicao[0];
        totalCalorias = 0;
        try{
            conexão.abrirStore();            
            refeição = new Refeicao[conexão.getStore().getNumRecords()];
            int i=0;
            RecordEnumeration re = conexão.getStore().enumerateRecords(null, null, false);
            while(re.hasNextElement()){
                int id = re.nextRecordId();
                System.out.println(id);
                Refeicao ref = new Refeicao();
                
                byte bytes[] = conexão.getStore().getRecord(id);
                ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
                DataInputStream dis = new DataInputStream(bais);
                ref.setIdAlimento(dis.readInt());
                ref.setQuantidade(dis.readInt());
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(new Date(dis.readLong()));
                ref.setData(cal);
                ref.setTotal(dis.readInt());
                totalCalorias  += ref.getTotal();
                
                if(caso == REFEICAO_DO_DIA){
                    if(ref.éHoje()){
                       refeição[i++] = ref; 
                    }
                }else if(caso == TODAS_AS_REFEIÇÕES){
                    if(ref.éHoje()){
                        refeição[i++] = ref;
                    }
                }
                
            }
            conexão.fecharStore();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        System.out.println(refeição.length+"<<<<<----");
        return refeição;
    }
    public int getPontos(Conexao conexão,int caso){ 
        
        
        int totalCalorias = 0;
        try{
            conexão.abrirStore();
            int i=0;
            RecordEnumeration re = conexão.getStore().enumerateRecords(null, null, false);
            while(re.hasNextElement()){
                int id = re.nextRecordId();
                System.out.println(id);
                Refeicao ref = new Refeicao();
                
                byte bytes[] = conexão.getStore().getRecord(id);
                ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
                DataInputStream dis = new DataInputStream(bais);
                ref.setIdAlimento(dis.readInt());
                ref.setQuantidade(dis.readInt());
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(new Date(dis.readLong()));
                ref.setData(cal);
                ref.setTotal(dis.readInt());
                totalCalorias  += ref.getTotal();
                
                
                
            }
            conexão.fecharStore();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        //System.out.println(refeição.length+"<<<<<----");
        return totalCalorias;
    }
    
    /**
     * @return the idAlimento
     */
    public int getIdAlimento() {
        return idAlimento;
    }

    /**
     * @param idAlimento the idAlimento to set
     */
    public void setIdAlimento(int idAlimento) {
        this.idAlimento = idAlimento;
    }

    /**
     * @return the quantidade
     */
    public int getQuantidade() {
        return quantidade;
    }

    /**
     * @param quantidade the quantidade to set
     */
    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    /**
     * @return the data
     */
    public Calendar getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(Calendar data) {
        this.data = data;
    }

    /**
     * @return the total
     */
    public int getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(int total) {
        this.total = total;
    }
}
